September 1999
"Cracking GizmoS VB CRACKME"
Win '95 PROGRAM
Win Code Reversing
 
byPlAyEr
 
 
Code Reversing For Beginners 
Program Details
Program Name: giz_crackme.exe
Program Type: Genius Crackme
Program Location: HERE
Program Size: 25 K
 
Tools Used:
Softice V3.2 - Debugger
Procdump V1.5-Unpacker
Process Patcher 2.5 by Thewd-Memory Patcher
W32Dasm-Disassembler
Rating
Easy (   )  Medium (X )  Hard (    )  Pro (    )
There is a crack, a crack in everything. That's how the light gets in.


GizmoS CrackMe ReverSing
Written by PlAyEr



 
 
 
 
 
 
Introduction

It´s a very small crackme,coded in Vb 6,nothing special.
 
About this protection system

The program is packed with petite 2.1,there are 3 things to crack,a code,a nag and name/serial;also there is anti-smartcheck!.
 
The Essay

When you first start giz_crackme.exe,you´ll see an input box asking for a code;let´s start at another point,we have Procdump,the very nice tool by UCF which can unpack our application,because when you try to open it with w32dasm,you won´t get any string data and so on;once we started Procdump

Click on Unpack.

You´ll see a long list of different packers,we know it is packed with petite 2.1 (use Gettyp for finding out which packer it uses ).We follow the instructions of procdump,wait till it is loaded,click ok and wait till the save dialog pops up.Save it as giz_cracked.exe for example;HMM,now let´s load the unpacked file in W32dasm and take a look of our String Data Reference,which is now visible... you´ll probably notice 4698-Gizmo-1296,c00l the code is blacklisted,let´s try it,but you must start the original exe,the other won´t work :-(

Okay,First protection solved,an easy one;let´s go on!Enter anything as name and as serial;and you´ll see the error message "Part II fucked..." and the program terminates;well,let´s look again at the string data,yes there it is!You will see this:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403F3A(C)
|

* Possible StringData Ref from Data Obj ->"Try again"
                                  |
:004040D8 BAF0284000              mov edx, 004028F0
:004040DD 8D8D74FFFFFF            lea ecx, dword ptr [ebp+FFFFFF74]
:004040E3 FF15A0104000            call dword ptr [004010A0]
:004040E9 B90A000000              mov ecx, 0000000A
:004040EE B804000280              mov eax, 80020004
:004040F3 898D3CFFFFFF            mov dword ptr [ebp+FFFFFF3C], ecx
:004040F9 898D4CFFFFFF            mov dword ptr [ebp+FFFFFF4C], ecx
:004040FF 8D950CFFFFFF            lea edx, dword ptr [ebp+FFFFFF0C]
:00404105 8D8D5CFFFFFF            lea ecx, dword ptr [ebp+FFFFFF5C]
:0040410B 898544FFFFFF            mov dword ptr [ebp+FFFFFF44], eax
:00404111 898554FFFFFF            mov dword ptr [ebp+FFFFFF54], eax

* Possible StringData Ref from Data Obj ->"Part II fucked..."
                                  |
:00404117 C78514FFFFFF04284000    mov dword ptr [ebp+FFFFFF14], 00402804
:00404121 C7850CFFFFFF08000000    mov dword ptr [ebp+FFFFFF0C], 00000008

Ok,noticed the Conditional Jump?Yea,think so;now go to 403F3A,you´ll see this:
:00403EF3 8D955CFFFFFF            lea edx, dword ptr [ebp+FFFFFF5C]
:00403EF9 51                      push ecx
:00403EFA 52                      push edx
:00403EFB C78570FFFFFF00000000    mov dword ptr [ebp+FFFFFF70], 00000000
:00403F05 898564FFFFFF            mov dword ptr [ebp+FFFFFF64], eax
:00403F0B C7855CFFFFFF08800000    mov dword ptr [ebp+FFFFFF5C], 00008008
:00403F15 FF1560104000            call dword ptr [00401060]
:00403F1B 8B1DDC104000            mov ebx, dword ptr [004010DC]
:00403F21 8D8D6CFFFFFF            lea ecx, dword ptr [ebp+FFFFFF6C]
:00403F27 8BF0                    mov esi, eax
:00403F29 FFD3                    call ebx
:00403F2B 8D8D5CFFFFFF            lea ecx, dword ptr [ebp+FFFFFF5C]
:00403F31 FF150C104000            call dword ptr [0040100C] __VbaFreeVar VB COMPARE CALL!
:00403F37 6685F6                  test si, si             Check if serial is correct
:00403F3A 0F8498010000            je 004040D8  Jump if NOT right

* Possible StringData Ref from Data Obj ->"Get ready for part 3..."
                                  |
:00403F40 BA88294000              mov edx, 00402988
:00403F45 8D8D78FFFFFF            lea ecx, dword ptr [ebp+FFFFFF78]

Next Step:Modify winice.dat,add msvbm60.dll AND remove msvbm50.dll,they won´t work together.Restart the computer,go back to your registration screen,
set a bpx hmemcpy and trace until the crackme code(not the msvbm60.dll CODE!);there you need to set a bpx 403F31 .SOFTICE BREAKS!Now trace into with F8 abd you´ll see this code snipplet:
Exported fn(): __vbaFreeVar - Ord:0083h
:6ADAF09E 56                      push esi
:6ADAF09F 8BF1                    mov esi, ecx
:6ADAF0A1 668B0E                  mov cx, word ptr [esi]
:6ADAF0A4 6683F908                cmp cx, 0008
:6ADAF0A8 7252                    jb 6ADAF0FC
:6ADAF0AA F6C540                  test ch, 40
:6ADAF0AD 754D                    jne 6ADAF0FC
:6ADAF0AF 8BC1                    mov eax, ecx
:6ADAF0B1 25FFFF0000              and eax, 0000FFFF
:6ADAF0B6 80E47F                  and ah, 7F
:6ADAF0B9 83F811                  cmp eax, 00000011
:6ADAF0BC 0F87C5720000            ja 6ADB6387
:6ADAF0C2 33D2                    xor edx, edx
:6ADAF0C4 8A905817DB6A            mov dl, byte ptr [eax+6ADB1758]
:6ADAF0CA FF24953817DB6A          jmp dword ptr [4*edx+6ADB1738]
:6ADAF0D1 8B4608                  mov eax, dword ptr [esi+08] <-Moves real and fake key to eax
:6ADAF0D4 85C0                    test eax, eax <-type "d eax" and you see the real and fake serial,in my case (PlAyEr),i´ll see 242C233926 as real code
:6ADAF0D6 7424                    je 6ADAF0FC
:6ADAF0D8 50                      push eax

Now run it and,yes,second solved,but now something strange:"Get ready for part 3...",hmm,think a moment and press ok;FUCK a nag screen,
but we´ll try to solve it.Now,we must start si again,bpx hmemcpy before pressing ok at the 2nd protection and now we need a good breakpoint,so have a
look for "Get ready for part 3...":
:00403F40 BA88294000              mov edx, 00402988
:00403F45 8D8D78FFFFFF            lea ecx, dword ptr [ebp+FFFFFF78]
:00403F4B FF15A0104000            call dword ptr [004010A0]
:00403F51 BB04000280              mov ebx, 80020004
:00403F56 BF0A000000              mov edi, 0000000A
:00403F5B 8D950CFFFFFF            lea edx, dword ptr [ebp+FFFFFF0C]
:00403F61 8D8D5CFFFFFF            lea ecx, dword ptr [ebp+FFFFFF5C]
:00403F67 899D44FFFFFF            mov dword ptr [ebp+FFFFFF44], ebx
:00403F6D 89BD3CFFFFFF            mov dword ptr [ebp+FFFFFF3C], edi
:00403F73 899D54FFFFFF            mov dword ptr [ebp+FFFFFF54], ebx
:00403F79 89BD4CFFFFFF            mov dword ptr [ebp+FFFFFF4C], edi

* Possible StringData Ref from Data Obj ->"Congratulation!"
                                  |
:00403F7F C78514FFFFFFB0264000    mov dword ptr [ebp+FFFFFF14], 004026B0
:00403F89 C7850CFFFFFF08000000    mov dword ptr [ebp+FFFFFF0C], 00000008

Ok,let´s set a bpx anywhere there,i.e. 403F67.You must be in the crackme code,remember;well softice breaks,and we trace...
until we notice,that after one call the rectangle of the nag is beeing painted,it is this one:
:004040A1 56                      push esi
:004040A2 894104                  mov dword ptr [ecx+04], eax
:004040A5 895108                  mov dword ptr [ecx+08], edx
:004040A8 8B9528FFFFFF            mov edx, dword ptr [ebp+FFFFFF28]
:004040AE 89510C                  mov dword ptr [ecx+0C], edx
:004040B1 FF97B0020000            call dword ptr [edi+000002B0] <-Here you notice loading of nag!
:004040B7 85C0                    test eax, eax
:004040B9 DBE2                    fclex
:004040BB 0F8D27010000            jnl 004041E8
:004040C1 68B0020000              push 000002B0

Now,what to do?Yea,let us nOP the call,fire up your hexeditor,but...FUCK!The file is packed,so the offsets don´t match,so we have to make a loader which patches the memory every time;i´ll asume you to use the process patcher i used,it is very easy.Ctreate the script file and then run the ppatch.exe,which automatically loads the crackme,enter the reg.data and look for the nag...It´s AWAY,we have done it,congratulations!!!

Program cracked.
The 'Crack'

Here you get exclusively the script file for our loader:
:#Process Patcher Configuration File
[Version]
1
[Friendly Name]
Gizmos crackme
[Program Filename]
giz_cr~1.exe
[Number of Bytes]
6
[Memory Addresses]
0x4040B1:0xFF:0x90
0x4040B2:0x97:0x90
0x4040B3:0xB0:0x90
0x4040B4:0x02:0x90
0x4040B5:0x00:0x90
0x4040B6:0x00:0x90
#End of Configuration File
 
Final Notes

Gizmo,very nice crackme,took me sometime to do it,nice work!
But it wasn´t good for me enough. *grin*
 

My thanks and gratitude goes to:
aDENOZiN,_Blade,Blaster99,PRD_NLS,cg,@ll TbC members,C.Connor,Zor,Acid_Burn,Torn@do,Itsgallus,sn00pee,Prof.X,TheAntiXryst,members of BEC,_zeus,Speedy,Storemaster,Sevando,Berserka,Moolok,Skorpien,CrazyK and everybody i forgot,tell me,if you should be here!!!
 
 
Ob Duh

Do I really have to remind you all that by buying and NOT stealing the software you use will ensure that these software houses will continue to  produce even *better* software for us to use and more importantly, to continue offering even more challenges to breaking their often weak protection systems.

If your looking for cracks or serial numbers from these pages then your wasting your time, try searching elsewhere on the Web under Warze, Cracks etc.

Essay by: PlAyEr
Page Created: 15th September 1999